package com.lemon.core.tenant.core.db;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.lemon.core.base.context.TenantContextHolder;
import com.lemon.core.tenant.config.TenantProperties;
import com.lemon.core.base.util.CheckUtils;
import lombok.AllArgsConstructor;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.NullValue;
import net.sf.jsqlparser.expression.StringValue;

/**
 * 租户信息处理器
 *
 * @author pan
 * @since 2020-07-12
 */
@AllArgsConstructor
public class LemonTenantHandler implements TenantLineHandler {

    private final TenantProperties properties;

    /**
     * 获取租户ID
     *
     * @return 租户ID
     */
    @Override
    public Expression getTenantId() {
        String tenantId = TenantContextHolder.getTenantId();
        if (CheckUtils.isNotBlank(tenantId)) {
            return new StringValue(tenantId);
        }
        return new NullValue();
    }

    /**
     * 过滤租户表，根据表名判断是否忽略拼接多租户条件
     * 情况一，全局忽略多租户
     * 情况二，忽略多租户的表
     * <p>
     * 默认都要进行解析并拼接多租户条件
     *
     * @param tableName 表名
     * @return 是否忽略, true:表示忽略，false:需要解析并拼接多租户条件
     */
    @Override
    public boolean ignoreTable(String tableName) {
        return TenantContextHolder.isIgnore() || CollUtil.contains(properties.getIgnoreTables(), tableName);
    }

}
